//mixins可以让一个类实现多继承的功能
//作为mixins的类只能继承于object 不能继承其他类
//作为mixins的类不能有构造方法
//一个类可以mixins多个mixins类
//Mixin绝不是继承 它是一种新的特性

mixin A {
  void printA() {
    print("A");
  }

  run() {
    print("A run");
  }
}

mixin B {
  void printB() {
    print("B");
  }

  run() {
    print("B run");
  }
}

class C with A, B {
  printInfo() {
    //可以直接调用 A,B中的方法 不用super
    printA();
    printB();
  }

  @override
  printA() {
    print("a in c");
  }
}

void main() {
  var c = new C();
  c.printA();
  c.printB();
  c.printInfo();
  //调用 mixin类的方法是 后面的类方法会替换掉前面的方法
  c.run();

  //查看c的类型
  print(c is A);
  print(c is B);
  print(c is C);
}
